package dao

import (
	"fmt"
	"regexp"
	"user-srv/basic/config"
	__ "user-srv/basic/proto"
	"user-srv/handler/models"
	"user-srv/pkg"
)

func SignJudge(NickName, Email, Signature string, Gender int) error {
	if len(NickName) > 0 {
		if len(NickName) < config.NickNameMinLength || len(NickName) > config.NickNameLength {
			return fmt.Errorf("昵称必须大于%d位小于%d位", config.NickNameMinLength, config.NickNameLength)
		}

	}
	if Gender != config.GenderMan && Gender != config.GenderWoman && Gender != config.GenderUnknow {
		return fmt.Errorf("性别错误")
	}

	if len(Email) > 0 {
		hasUpper := regexp.MustCompile(config.EmailRegex).MatchString(Email)
		if !hasUpper {
			return fmt.Errorf("邮箱格式错误")
		}

	}
	if len(Signature) > 0 {
		// 1. 长度判断（1-200字符）
		maxLen := config.SignatureLength
		if len(Signature) > maxLen {
			return fmt.Errorf("个性签名最多200个字符")
		}

		// 2. 特殊字符过滤（HTML标签）
		htmlRegex := regexp.MustCompile(config.SignatureHTMLRegex)
		if htmlRegex.MatchString(Signature) {
			return fmt.Errorf("签名不可包含HTML标签")
		}

		// 3. 敏感词检测（示例：简单敏感词库）
		if !pkg.Baid(Signature) {
			return fmt.Errorf("签名包含不适当内容，请修改")
		}

		// 4. 无意义内容检测（纯符号）
		symbolRegex := regexp.MustCompile(config.SignatureSymbolRegex) // 仅包含非单词字符（符号、空格等）
		if len(Signature) < 0 && symbolRegex.MatchString(Signature) {
			return fmt.Errorf("请输入有意义的签名")
		}
	}
	return nil
}

// 用户添加资料
func UserProfileCreated(in *__.UserProfileCreatedReq) (*models.UserProfile, error) {
	var UserProfile models.UserProfile
	UserProfile.UserId = in.UserId

	err := SignJudge(in.NickName, in.Email, in.Signature, int(in.Gender))
	if err != nil {
		return nil, err
	}
	UserProfile.NickName = in.NickName   //昵称
	UserProfile.Gender = in.Gender       //性别
	UserProfile.Email = in.Email         //邮箱
	UserProfile.Signature = in.Signature //个性签名
	err = UserProfile.UserProfileCreated()
	if err != nil {
		return nil, fmt.Errorf("用户添加资料失败")
	}
	return &UserProfile, nil
}

// 用户修改个人资料
func UserProfileUpdate(in *__.UserProfileUpdatedReq) (*models.UserProfile, error) {
	var UserProfile models.UserProfile
	UserProfile.UserId = in.UserId //用户id

	err := SignJudge(in.NickName, in.Email, in.Signature, int(in.Gender))
	if err != nil {
		return nil, err
	}

	UserProfile.NickName = in.NickName   //昵称
	UserProfile.Gender = in.Gender       //性别
	UserProfile.Email = in.Email         //邮箱
	UserProfile.Signature = in.Signature //个性签名

	err = UserProfile.UserProfileUpdated()
	if err != nil {
		return nil, fmt.Errorf("用户修改资料失败")
	}
	return &UserProfile, nil
}

// 用户查询个人资料详情
func UserProfileDetail(in *__.UserProfileDetailReq) (*models.UserProfile, error) {
	var UserProfile models.UserProfile
	UserProfile.UserId = in.UserId

	err := UserProfile.UserProfileDetail()
	if err != nil {
		return nil, fmt.Errorf("用户查询资料失败")
	}

	return &UserProfile, nil
}
